package cn.bigfire.compiler.mytest.calc;

import java.util.Scanner;
import java.util.Stack;


/**
 * gpt生成的 四则运算计算器 代码
 *
 */
public class Calculator {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个四则运算表达式：");
        String expression = scanner.nextLine();
        int result = calculate(expression);
        System.out.println("计算结果为：" + result);
    }

    public static int calculate(String expression) {
        // 去除空白字符
        expression = expression.replaceAll("\\s", "");
        // 初始化栈
        Stack<Integer> stack = new Stack<>();
        stack.push(0); // 将初始值压入栈中
        char sign = '+'; // 初始符号为加号
        int num = 0; // 当前数字
        for (int i = 0; i < expression.length(); i++) {
            char c = expression.charAt(i);
            if (Character.isDigit(c)) { // 处理数字
                num = num * 10 + (c - '0');
            }
            if (i == expression.length() - 1 || "+-*/()".indexOf(c) != -1) { // 处理符号
                switch (sign) {
                    case '+':
                        stack.push(num);
                        break;
                    case '-':
                        stack.push(-num);
                        break;
                    case '*':
                        stack.push(stack.pop() * num);
                        break;
                    case '/':
                        stack.push(stack.pop() / num);
                        break;
                }
                // 准备下一个数字
                num = 0;
                sign = c;
                if (c == ')') { // 处理括号
                    int sum = 0;
                    while (!stack.empty() && stack.peek() != 0) {
                        sum += stack.pop();
                    }
                    stack.pop(); // 弹出左括号
                    stack.push(sum);
                }
            }
        }
        // 计算最终结果
        int result = 0;
        while (!stack.empty()) {
            result += stack.pop();
        }
        return result;
    }
}
